/**
 * axios全局配置，包括验证校验及错误处理
 */
import Vue from 'vue'
import { Message } from 'element-ui'
Vue.component(Message.name, Message)
import axios from 'axios'
import qs from 'qs'
import store from '../store'
import Cookies from 'js-cookie'
import router from '../router'

// 超时和URL地址设置
const service = axios.create({
    baseURL: "/api/",
    // withCredentials: true,
    // headers: { 'Content-Type': 'application/json' },
    timeout: 5000 // 请求超时时间
});


//测试
// const service = axios.create({
//     baseURL: "http://192.168.10.77:8080/mes/",
//     withCredentials: true,
//     headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
//     timeout: 5000, // 请求超时时间
//     transformRequest: [function(data) {
//         data = { "json": qs.stringify(data) }
//         return data
//     }]
// });

// http request 拦截器
// 每次请求都为http头增加Authorization字段，其内容为token
// service.interceptors.request.use(
//     config => {
//         if (store.state.user.token) {
//             config.headers.Authorization = `token ${store.state.user.token}`;
//         }
//         return config;
//     },
//     err => {
//         return Promise.reject(err);
//     });

//POST传参序列化
// service.interceptors.request.use((config) => {
//     if (config.method === 'post') {
//         config.data = qs.stringify(config.data);
//     }
//     return config;
// }, (error) => {
//     return Promise.reject(error);
// })


// http response 拦截器
// 针对响应代码确认跳转到对应页面
service.interceptors.response.use(
    // response => response,
    response => {
        // 登陆失效 判定
        if (response.data.status === 403) {
            Vue.prototype.$message({
                message: '登录失败！请重新登录',
                type: 'error'
            });
            Cookies.set('setUID', '')
            Cookies.set('setName', '')
            Cookies.set('setToken', '')
            localStorage.removeItem("menu")
            localStorage.removeItem("role")
            localStorage.removeItem("user")
            router.push('/login');
        } else {
            return response
        }
    },
    error => {
        if (error.response) {
            console.log(error.response)
            switch (error.response.status) {
                case 401:
                    router.push('/error/401');
                case 403:
                    router.push('/error/403');
                case 500:
                    router.push('/error/500');
            }
        }

        return Promise.reject(error.response.data)
    }
);

export default service;